<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test Report 8222420010020050</title>
    <meta name="generator" content="HTMLTestRunner 0.8.2"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    
<style type="text/css" media="screen">
body        { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }
table       { font-size: 100%; }
pre         { }

/* -- heading ---------------------------------------------------------------------- */
h1 {
	font-size: 16pt;
	color: gray;
}
.heading {
    margin-top: 0ex;
    margin-bottom: 1ex;
}

.heading .attribute {
    margin-top: 1ex;
    margin-bottom: 0;
}

.heading .description {
    margin-top: 4ex;
    margin-bottom: 6ex;
}

/* -- css div popup ------------------------------------------------------------------------ */
a.popup_link {
}

a.popup_link:hover {
    color: red;
}

.popup_window {
    display: none;
    position: relative;
    left: 0px;
    top: 0px;
    /*border: solid #627173 1px; */
    padding: 10px;
    background-color: #E6E6D6;
    font-family: "Lucida Console", "Courier New", Courier, monospace;
    text-align: left;
    font-size: 8pt;
    width: 500px;
}

}
/* -- report ------------------------------------------------------------------------ */
#show_detail_line {
    margin-top: 3ex;
    margin-bottom: 1ex;
}
#result_table {
    width: 80%;
    border-collapse: collapse;
    border: 1px solid #777;
}
#header_row {
    font-weight: bold;
    color: white;
    background-color: #777;
}
#result_table td {
    border: 1px solid #777;
    padding: 2px;
}
#total_row  { font-weight: bold; }
.passClass  { background-color: #6c6; }
.failClass  { background-color: #c60; }
.errorClass { background-color: #c00; }
.passCase   { color: #6c6; }
.failCase   { color: #c60; font-weight: bold; }
.errorCase  { color: #c00; font-weight: bold; }
.hiddenRow  { display: none; }
.testcase   { margin-left: 2em; }


/* -- ending ---------------------------------------------------------------------- */
#ending {
}

</style>

</head>
<body>
<script language="javascript" type="text/javascript"><!--
output_list = Array();

/* level - 0:Summary; 1:Failed; 2:All */
function showCase(level) {
    trs = document.getElementsByTagName("tr");
    for (var i = 0; i < trs.length; i++) {
        tr = trs[i];
        id = tr.id;
        if (id.substr(0,2) == 'ft') {
            if (level < 1) {
                tr.className = 'hiddenRow';
            }
            else {
                tr.className = '';
            }
        }
        if (id.substr(0,2) == 'pt') {
            if (level > 1) {
                tr.className = '';
            }
            else {
                tr.className = 'hiddenRow';
            }
        }
    }
}


function showClassDetail(cid, count) {
    var id_list = Array(count);
    var toHide = 1;
    for (var i = 0; i < count; i++) {
        tid0 = 't' + cid.substr(1) + '.' + (i+1);
        tid = 'f' + tid0;
        tr = document.getElementById(tid);
        if (!tr) {
            tid = 'p' + tid0;
            tr = document.getElementById(tid);
        }
        id_list[i] = tid;
        if (tr.className) {
            toHide = 0;
        }
    }
    for (var i = 0; i < count; i++) {
        tid = id_list[i];
        if (toHide) {
            document.getElementById('div_'+tid).style.display = 'none'
            document.getElementById(tid).className = 'hiddenRow';
        }
        else {
            document.getElementById(tid).className = '';
        }
    }
}


function showTestDetail(div_id){
    var details_div = document.getElementById(div_id)
    var displayState = details_div.style.display
    // alert(displayState)
    if (displayState != 'block' ) {
        displayState = 'block'
        details_div.style.display = 'block'
    }
    else {
        details_div.style.display = 'none'
    }
}


function html_escape(s) {
    s = s.replace(/&/g,'&amp;');
    s = s.replace(/</g,'&lt;');
    s = s.replace(/>/g,'&gt;');
    return s;
}

/* obsoleted by detail in <div>
function showOutput(id, name) {
    var w = window.open("", //url
                    name,
                    "resizable,scrollbars,status,width=800,height=450");
    d = w.document;
    d.write("<pre>");
    d.write(html_escape(output_list[id]));
    d.write("\n");
    d.write("<a href='javascript:window.close()'>close</a>\n");
    d.write("</pre>\n");
    d.close();
}
*/
--></script>

<div class='heading'>
<h1>Test Report 8222420010020050</h1>
<p class='attribute'><strong>Start Time:</strong> 2025-01-06 15:54:29</p>
<p class='attribute'><strong>Duration:</strong> 0:00:00.025950</p>
<p class='attribute'><strong>Status:</strong> Pass 85 Failure 4 Error 7</p>

<p class='description'>Test case details</p>
</div>



<p id='show_detail_line'>Show
<a href='javascript:showCase(0)'>Summary</a>
<a href='javascript:showCase(1)'>Failed</a>
<a href='javascript:showCase(2)'>All</a>
</p>
<table id='result_table'>
<colgroup>
<col align='left' />
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' />
</colgroup>
<tr id='header_row'>
    <td>Test Group/Test case</td>
    <td>Count</td>
    <td>Pass</td>
    <td>Fail</td>
    <td>Error</td>
    <td>View</td>
</tr>

<tr class='errorClass'>
    <td>test1_gps_package.TestGPS</td>
    <td>47</td>
    <td>42</td>
    <td>1</td>
    <td>4</td>
    <td><a href="javascript:showClassDetail('c1',47)">Detail</a></td>
</tr>

<tr id='pt1.1' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包01_GPS最强5颗卫星编号及强度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.2' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包02_车辆ACC状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.3' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包03_STE自采电压</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.4' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包04_GPS速度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.5' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包05_GPS锁定卫星数</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.6' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包06_GSM信号强度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.7' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包07_HDOP水平经度因子</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.8' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包08_PDOP综合位置精度因子</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.9' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包09_PositionMode</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.10' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包10_VDOP垂直精度因子</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.11' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包11_报文码</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.12' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包12_createTime</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.13' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包13_steCreateTime</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.14' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包14_createTime和steCreateTime的时间差</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.15' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包15_数据类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.16' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包16_防盗模式</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.17' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包17_头盔在位状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.18' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包18_头盔佩戴状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.19' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包19_头盔状态有效位</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.20' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包20_智能头盔流程状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.21' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包21_协议版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.22' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包22_流水号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.23' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包22_海拔高度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.24' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包23_车辆休眠状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.25' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包24_单次里程数</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.26' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包25_基站信息</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.27' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包26_备用电池电量</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.28' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包27_外接电源在位状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.29' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包28_头盔ID</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.30' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包29_定位状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.31' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包30_定位状态类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.32' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包31_定位类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.33' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包32_总里程</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.34' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包33_方位角</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft1.35' class='none'>
    <td class='failCase'><div class='testcase'>test_定位包34_方位角可信度</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.35')" >
        fail</a>

    <div id='div_ft1.35' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.35').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft1.35: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 160, in test_定位包34_方位角可信度
    self.assertIn(self.gps_data["方位角可信度"], list(range(0, 101)), "定位包中方位角可信度不在0~100之内")
AssertionError: 255 not found in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] : 定位包中方位角可信度不在0~100之内
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 160, in test_定位包34_方位角可信度
    self.assertIn(self.gps_data["方位角可信度"], list(range(0, 101)), "定位包中方位角可信度不在0~100之内")
AssertionError: 255 not found in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] : 定位包中方位角可信度不在0~100之内


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt1.36' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包35_车辆电机加锁状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft1.37' class='none'>
    <td class='errorCase'><div class='testcase'>test_定位包36_可用剩余电量</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.37')" >
        error</a>

    <div id='div_ft1.37' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.37').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft1.37: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 166, in test_定位包36_可用剩余电量
    self.assertGreater(self.gps_data["备用剩余电量"], 0, "定位包中可用剩余电量小于等于0")
                       ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
KeyError: '备用剩余电量'
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 166, in test_定位包36_可用剩余电量
    self.assertGreater(self.gps_data["备用剩余电量"], 0, "定位包中可用剩余电量小于等于0")
                       ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
KeyError: '备用剩余电量'


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='ft1.38' class='none'>
    <td class='errorCase'><div class='testcase'>test_定位包37_相对SOC</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.38')" >
        error</a>

    <div id='div_ft1.38' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.38').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft1.38: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 169, in test_定位包37_相对SOC
    self.assertIn(self.gps_data["相对SOC"], list(range(0, 101)), "定位包中电池剩余电量百分比不是1~100")
                  ~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: '相对SOC'
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 169, in test_定位包37_相对SOC
    self.assertIn(self.gps_data["相对SOC"], list(range(0, 101)), "定位包中电池剩余电量百分比不是1~100")
                  ~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: '相对SOC'


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt1.39' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包38_锂电池组总电压</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.40' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包39_移动网络类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.41' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包40_经纬度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.42' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包41_车辆蓝牙连接状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.43' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包42_运动状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.44' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包43_霍尔速度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt1.45' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_定位包44_车辆骑行状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft1.46' class='none'>
    <td class='errorCase'><div class='testcase'>test_定位包45_各转把电压值</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.46')" >
        error</a>

    <div id='div_ft1.46' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.46').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft1.46: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 202, in test_定位包45_各转把电压值
    TestData().request_and_assert_params("NET", "OPEN")
    ^^^^^^^^
NameError: name 'TestData' is not defined. Did you mean: 'test_data'?
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 202, in test_定位包45_各转把电压值
    TestData().request_and_assert_params("NET", "OPEN")
    ^^^^^^^^
NameError: name 'TestData' is not defined. Did you mean: 'test_data'?


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='ft1.47' class='none'>
    <td class='errorCase'><div class='testcase'>test_定位包_SOH</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft1.47')" >
        error</a>

    <div id='div_ft1.47' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft1.47').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft1.47: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 69, in test_定位包_SOH
    self.assertIn(self.gps_data["SOH"], list(range(0, 101)), "定位包中SOH不在0~100")
                  ~~~~~~~~~~~~~^^^^^^^
KeyError: 'SOH'
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_gps_package.py", line 69, in test_定位包_SOH
    self.assertIn(self.gps_data["SOH"], list(range(0, 101)), "定位包中SOH不在0~100")
                  ~~~~~~~~~~~~~^^^^^^^
KeyError: 'SOH'


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr class='errorClass'>
    <td>test1_heart_package.TestHeart</td>
    <td>26</td>
    <td>24</td>
    <td>0</td>
    <td>2</td>
    <td><a href="javascript:showClassDetail('c2',26)">Detail</a></td>
</tr>

<tr id='pt2.1' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_GPS锁定卫星数</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.2' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_GSM信号强度</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.3' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_createTime</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.4' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_createTime和steCreateTime的时间差</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.5' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_steCreateTime</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.6' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_协议版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft2.7' class='none'>
    <td class='errorCase'><div class='testcase'>test_心跳包_可用剩余电量</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft2.7')" >
        error</a>

    <div id='div_ft2.7' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft2.7').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft2.7: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_heart_package.py", line 77, in test_心跳包_可用剩余电量
    self.assertGreater(self.heart_data["可用剩余电量"], 0, "心跳包中可用剩余电量小于等于0")
                       ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
KeyError: '可用剩余电量'
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_heart_package.py", line 77, in test_心跳包_可用剩余电量
    self.assertGreater(self.heart_data["可用剩余电量"], 0, "心跳包中可用剩余电量小于等于0")
                       ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
KeyError: '可用剩余电量'


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt2.8' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_备用电池电量</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.9' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_外接电源在位状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.10' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_头盔状态有效位</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.11' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_定位状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.12' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_报文码</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.13' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_数据类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.14' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_流水号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.15' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_电池锁状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft2.16' class='none'>
    <td class='errorCase'><div class='testcase'>test_心跳包_相对SOC</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft2.16')" >
        error</a>

    <div id='div_ft2.16' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft2.16').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft2.16: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_heart_package.py", line 80, in test_心跳包_相对SOC
    self.assertIn(self.heart_data["相对SOC"], list(range(1, 101)), "心跳包中电池相对SOC不是1~100")
                  ~~~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: '相对SOC'
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_heart_package.py", line 80, in test_心跳包_相对SOC
    self.assertIn(self.heart_data["相对SOC"], list(range(1, 101)), "心跳包中电池相对SOC不是1~100")
                  ~~~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: '相对SOC'


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt2.17' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_移动网络类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.18' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_车辆ACC状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.19' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_车辆休眠状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.20' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_车辆电机加锁状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.21' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_车辆蓝牙连接状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.22' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_车辆骑行状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.23' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_转把可使用状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.24' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_运动状态</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.25' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_锂电池组总电压</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt2.26' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_心跳包_防盗模式</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr class='errorClass'>
    <td>test1_login_package.TestLogin</td>
    <td>23</td>
    <td>19</td>
    <td>3</td>
    <td>1</td>
    <td><a href="javascript:showClassDetail('c3',23)">Detail</a></td>
</tr>

<tr id='pt3.1' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_ECU厂商</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.2' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_MCU版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.3' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_STE固件版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.4' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_bleMac</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.5' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_createTime和steCreateTime的时间差</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.6' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_imei</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft3.7' class='none'>
    <td class='failCase'><div class='testcase'>test_登录包_imsi</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft3.7')" >
        fail</a>

    <div id='div_ft3.7' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft3.7').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft3.7: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 51, in test_登录包_imsi
    self.assertEqual("4600", imsi[:4], "登录包中imsi开头不是4600")
AssertionError: '4600' != '4602'
- 4600
?    ^
+ 4602
?    ^
 : 登录包中imsi开头不是4600
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 51, in test_登录包_imsi
    self.assertEqual("4600", imsi[:4], "登录包中imsi开头不是4600")
AssertionError: '4600' != '4602'
- 4600
?    ^
+ 4602
?    ^
 : 登录包中imsi开头不是4600


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt3.8' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_产品名称</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.9' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_协议版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.10' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_厂商ID</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.11' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_头盔锁固件版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.12' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_当前语音的最大编号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.13' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_报文码</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft3.14' class='none'>
    <td class='failCase'><div class='testcase'>test_登录包_控制器固件版本号</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft3.14')" >
        fail</a>

    <div id='div_ft3.14' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft3.14').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft3.14: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 115, in test_登录包_控制器固件版本号
    self.assertEqual(self.agreement_dict["controller_version"], self.login_data["控制器固件版本号"],
AssertionError: '4.0.36' != '4.0.71'
- 4.0.36
+ 4.0.71
 : 登录包中控制器固件版本号不是4.0.36
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 115, in test_登录包_控制器固件版本号
    self.assertEqual(self.agreement_dict["controller_version"], self.login_data["控制器固件版本号"],
AssertionError: '4.0.36' != '4.0.71'
- 4.0.36
+ 4.0.71
 : 登录包中控制器固件版本号不是4.0.36


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt3.15' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_数据类型</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft3.16' class='none'>
    <td class='failCase'><div class='testcase'>test_登录包_显示屏固件版本号</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft3.16')" >
        fail</a>

    <div id='div_ft3.16' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft3.16').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft3.16: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 110, in test_登录包_显示屏固件版本号
    self.assertEqual(self.agreement_dict["electronic_screen_version"], self.login_data["显示屏固件版本号"],
AssertionError: '1.0.14' != '1.0.18'
- 1.0.14
?      ^
+ 1.0.18
?      ^
 : 登录包中显示屏固件版本号不是1.0.14
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 110, in test_登录包_显示屏固件版本号
    self.assertEqual(self.agreement_dict["electronic_screen_version"], self.login_data["显示屏固件版本号"],
AssertionError: '1.0.14' != '1.0.18'
- 1.0.14
?      ^
+ 1.0.18
?      ^
 : 登录包中显示屏固件版本号不是1.0.14


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt3.17' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_流水号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.18' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_登录原因</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.19' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_短信协议版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.20' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_硬件版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='pt3.21' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_蓝牙协议版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='ft3.22' class='none'>
    <td class='errorCase'><div class='testcase'>test_登录包_通信扩展单元固件版本号</div></td>
    <td colspan='5' align='center'>

    <!--css div popup start-->
    <a class="popup_link" onfocus='this.blur();' href="javascript:showTestDetail('div_ft3.22')" >
        error</a>

    <div id='div_ft3.22' class="popup_window">
        <div style='text-align: right; color:red;cursor:pointer'>
        <a onfocus='this.blur();' onclick="document.getElementById('div_ft3.22').style.display = 'none' " >
           [x]</a>
        </div>
        <pre>
        
ft3.22: Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 87, in test_登录包_通信扩展单元固件版本号
    self.assertEqual(self.agreement_dict["bottom_extension"], self.login_data["通信扩展单元固件版本号"],
                                                              ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: '通信扩展单元固件版本号'
Traceback (most recent call last):
  File "/Users/songguo77/songguo/TestAuto/test_case_47/test1_login_package.py", line 87, in test_登录包_通信扩展单元固件版本号
    self.assertEqual(self.agreement_dict["bottom_extension"], self.login_data["通信扩展单元固件版本号"],
                                                              ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: '通信扩展单元固件版本号'


        </pre>
    </div>
    <!--css div popup end-->

    </td>
</tr>

<tr id='pt3.23' class='hiddenRow'>
    <td class='none'><div class='testcase'>test_登录包_通信模块底层固件版本号</div></td>
    <td colspan='5' align='center'>pass</td>
</tr>

<tr id='total_row'>
    <td>Total</td>
    <td>96</td>
    <td>85</td>
    <td>4</td>
    <td>7</td>
    <td>&nbsp;</td>
</tr>
</table>

<div id='ending'>&nbsp;</div>

</body>
</html>
